import AppBar from "@/components/layouts/AppBar"; import Layout from "@/components/layouts/Layout"; import LineDivider from "@/components/elements/LineDivider"; import WithAuth from "@/components/auth/WithAuth"; import { useCallback, useEffect, useRef, useState } from "react"; import apiOdoo from "@/core/utils/apiOdoo"; import { useRouter } from "next/router"; import { useAuth } from "@/core/utils/auth"; import currencyFormat from "@/core/utils/currencyFormat"; import DescriptionRow from "@/components/elements/DescriptionRow"; import { TransactionDetailAddress } from "@/components/transactions/TransactionDetail"; import { SkeletonList } from "@/components/elements/Skeleton"; import Link from "@/components/elements/Link"; import { ChevronRightIcon } from "@heroicons/react/24/outline"; import Alert from "@/components/elements/Alert"; import TransactionStatusBadge from "@/components/transactions/TransactionStatusBadge"; import useConfirmAlert from "@/lib/elements/hooks/useConfirmAlert"; import { toast } from "react-hot-toast"; import useBottomPopup from "@/lib/elements/hooks/useBottomPopup"; import getFileBase64 from "@/core/utils/getFileBase64"; import VariantGroupCard from "@/components/variants/VariantGroupCard"; export default function DetailTransaction() { const router = useRouter(); const { id } = router.query; const [ auth ] = useAuth(); const [ transaction, setTransaction ] = useState(null); const loadTransaction = useCallback(async () => { if (auth && id) { const dataTransaction = await apiOdoo('GET', `/api/v1/partner/${auth?.partner_id}/sale_order/${id}`); setTransaction(dataTransaction); } }, [ auth, id ]); useEffect(() => { loadTransaction(); }, [ loadTransaction ]); const submitCancelTransaction = async (data) => { const isCancelled = await apiOdoo('POST', `/api/v1/partner/${auth.partner_id}/sale_order/${data.id}/cancel`); if (isCancelled) { toast.success('Berhasil batalkan transaksi'); loadTransaction(); } } const { openConfirmAlert, ConfirmAlert } = useConfirmAlert({ title: 'Batalkan Transaksi', caption: 'Apakah anda yakin untuk membatalkan transaksi?', closeText: 'Tidak', submitText: 'Iya, batalkan', onSubmit: submitCancelTransaction }); const UploadPurchaseOrder = () => { const nameRef = useRef(''); const fileRef = useRef(''); const submitUploadPurchaseOrder = async (e) => { e.preventDefault(); const file = fileRef.current.files[0]; const name = nameRef.current.value; if (file.size > 5000000) { toast.error('Maksimal ukuran file adalah 5MB', { position: 'bottom-center' }); return; } const parameter = { name, file: await getFileBase64(file) }; const isUploaded = await apiOdoo('POST', `/api/v1/partner/${auth.partner_id}/sale_order/${transaction.id}/upload_po`, parameter); if (isUploaded) { toast.success('Berhasil upload PO'); loadTransaction(); closePopup(); } }; return (
); } const { closePopup, BottomPopup, openPopup } = useBottomPopup({ title: 'Upload PO', children: UploadPurchaseOrder }); const downloadPurchaseOrder = () => { const url = `${process.env.ODOO_HOST}/api/v1/partner/${auth.partner_id}/sale_order/${transaction.id}/download_po/${transaction.token}`; window.open(url, 'download') }; const downloadQuotation = () => { const url = `${process.env.ODOO_HOST}/api/v1/partner/${auth.partner_id}/sale_order/${transaction.id}/download/${transaction.token}`; window.open(url, 'download') }; const checkout = async () => { if (!transaction.purchase_order_file) { toast.error('Mohon upload dokumen PO anda sebelum melanjutkan pesanan') return } await apiOdoo('POST', `/api/v1/partner/${auth?.partner_id}/sale_order/${id}/checkout`) toast.success('Berhasil melanjutkan pesanan') loadTransaction() } return ( { transaction ? ( <>
{ transaction?.name } { transaction?.payment_term } { transaction?.sales } { transaction?.date_order }
{ transaction?.purchase_order_name || '-' }

Dokumen PO

Detail Produk

Total Belanja

{ currencyFormat(transaction?.amount_total || 0) }

Invoice

{ transaction?.invoices?.map((invoice, index) => (

{ invoice?.name }

{ invoice.amount_residual > 0 ? (
Belum Lunas
) : (
Lunas
) }

{ currencyFormat(invoice.amount_total) }

)) } { transaction?.invoices?.length === 0 && ( Belum ada Invoice ) }
{ transaction?.status == 'draft' && ( ) } { transaction?.status != 'draft' && ( ) }
) : (
) } { ConfirmAlert } { BottomPopup }
); }